package org.samurai.logging.v10; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.turbo.TurboFilter; import org.hibernate.validator.constraints.NotEmpty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; /** * User: Jim Hazen * Date: 5/22/13 * Time: 12:32 PM */ @Validated @Controller public class MDCFilterController { Logger log = LoggerFactory.getLogger(MDCFilterController.class); @RequestMapping(value = "/1.0/admin/logging/mdc", method = RequestMethod.GET) public @ResponseBody Object getFilters() { LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); for (TurboFilter filter : context.getTurboFilterList()) { if (DynamicMDCFilter.class.equals(filter.getClass())) { return ((DynamicMDCFilter) filter).getRegisteredFilters(); } } return "DynamicMDCFilter not configured. Please check logback.xml."; } @RequestMapping(value = "/1.0/admin/logging/mdc/_add", method = RequestMethod.GET) public @ResponseBody Object addFilter(@NotEmpty(message = "You must specify a 'key' param") @RequestParam(required = false) String key, @NotEmpty(message = "You must specify a 'value' param") @RequestParam(required = false) String value, @RequestParam(required = false, defaultValue = "trace") String level) { LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); for(TurboFilter filter : context.getTurboFilterList()) { if(DynamicMDCFilter.class.equals(filter.getClass())) { ((DynamicMDCFilter)filter).addMDCMatch(key, value, level); return ((DynamicMDCFilter)filter).getRegisteredFilters(); } } return "DynamicMDCFilter not configured. Please check logback.xml."; } @RequestMapping(value = "/1.0/admin/logging/mdc/_drop", method = RequestMethod.GET) public @ResponseBody Object dropFilter(@NotEmpty(message = "You must specify a 'key' param") @RequestParam(required = false) String key, @NotEmpty(message = "You must specify a 'value' param") @RequestParam(required = false) String value) { LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); for(TurboFilter filter : context.getTurboFilterList()) { if(DynamicMDCFilter.class.equals(filter.getClass())) { ((DynamicMDCFilter)filter).dropMDCMatch(key, value); return ((DynamicMDCFilter)filter).getRegisteredFilters(); } } return "DynamicMDCFilter not configured. Please check logback.xml."; } @RequestMapping(value = "/1.0/admin/logging/mdc/_dropAll", method = RequestMethod.GET) public @ResponseBody Object dropAllFilter() { LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); for(TurboFilter filter : context.getTurboFilterList()) { if(DynamicMDCFilter.class.equals(filter.getClass())) { ((DynamicMDCFilter)filter).clear(); return ((DynamicMDCFilter)filter).getRegisteredFilters(); } } return "DynamicMDCFilter not configured. Please check logback.xml."; } }